#!/usr/bin/env bash
set -euo pipefail

# AIDevFlow 脚本：框架使用模式配置助手（安全占位版）
# 用途：指导在 submodule/subtree/vendor/ignored 模式之间进行选择与操作。默认不执行破坏性 Git 操作。
# 选项：
#   --mode=submodule|subtree|vendor|ignored   选择模式（必选）
#   --remote=<url>                            上游仓库地址（部分模式建议提供）
#   --branch=<name>                           上游分支（默认 main）
#   --apply                                   对 ignored 模式应用 .gitignore 变更；其他模式仅输出建议步骤
# 用法示例：
#   bash scripts/setup-framework-mode.sh --mode=submodule --remote=https://github.com/org/AIDevFlow.git
#   bash scripts/setup-framework-mode.sh --mode=subtree --remote=git@github.com:org/AIDevFlow.git --branch=main
#   bash scripts/setup-framework-mode.sh --mode=ignored --apply
# 注意事项：本脚本为“安全占位版”，不执行 git add/subtree 等操作；请按输出指令在交互式环境中执行。

ROOT_DIR="$(cd "$(dirname "$0")"/.. && pwd)"
RULES_ENV="$ROOT_DIR/config/rules.env"
MODE=""
REMOTE=""
BRANCH="main"
APPLY=false
INTERACTIVE=true

for i in "$@"; do
  case $i in
    --mode=*) MODE="${i#*=}";;
    --remote=*) REMOTE="${i#*=}";;
    --branch=*) BRANCH="${i#*=}";;
    --apply) APPLY=true;;
    --interactive) INTERACTIVE=true;;
    --non-interactive) INTERACTIVE=false;;
  esac
done

# 若非交互式终端，自动关闭交互
if [[ ! -t 0 ]]; then
  INTERACTIVE=false
fi

# 交互式选择模式（未指定 --mode 时）
if [[ -z "$MODE" && "$INTERACTIVE" == "true" ]]; then
  echo "请选择框架模式："
  echo "  [1] submodule"
  echo "  [2] subtree"
  echo "  [3] vendor"
  echo "  [4] ignored"
  read -r -p "输入选项数字并回车 [1-4]: " choice
  case "$choice" in
    1) MODE="submodule";;
    2) MODE="subtree";;
    3) MODE="vendor";;
    4) MODE="ignored";;
    *) echo "[ERROR] 未选择有效模式"; exit 2;;
  esac
fi

if [[ -z "$MODE" ]]; then
  echo "[ERROR] --mode 必填: submodule|subtree|vendor|ignored" >&2
  exit 2
fi

case "$MODE" in
  submodule)
    echo "[建议步骤] Submodule 模式"
    echo "1) 在项目根执行：git submodule add ${REMOTE:-<AIDevFlow-remote-url>} AIDevFlow"
    echo "2) 初始化子模块：git submodule update --init --recursive"
    echo "3) 后续更新：git submodule update --remote --merge"
    ;;
  subtree)
    echo "[建议步骤] Subtree 模式"
    echo "1) 引入：git subtree add --prefix=AIDevFlow ${REMOTE:-<AIDevFlow-remote-url>} ${BRANCH} --squash"
    echo "2) 更新：git subtree pull --prefix=AIDevFlow ${REMOTE:-<AIDevFlow-remote-url>} ${BRANCH} --squash"
    echo "3) 回推：git subtree push --prefix=AIDevFlow ${REMOTE:-<AIDevFlow-remote-url>} feature-x"
    ;;
  vendor)
    echo "[建议步骤] Vendor 模式"
    echo "1) 将当前框架目录拷贝为普通目录，确保无 <框架目录>/.git 子目录"
    echo "2) 直接在主项目中提交与维护该目录（vendor 语义）"
    echo "[提示] 如果不希望随主项目提交，请选择 ignored 模式："
    echo "      bash scripts/setup-framework-mode.sh --mode=ignored --apply"
    ;;
  ignored)
    echo "[建议步骤] Ignore 模式"
    # 框架目录名称支持从 config/rules.env 读取；默认回退为当前目录名
    if [[ -f "$RULES_ENV" ]] && grep -q "^FRAMEWORK_DIR_NAME=" "$RULES_ENV"; then
      FRAMEWORK_DIR_NAME="$(grep -E '^FRAMEWORK_DIR_NAME=' "$RULES_ENV" | sed 's/^FRAMEWORK_DIR_NAME=//')"
    else
      FRAMEWORK_DIR_NAME="${FRAMEWORK_DIR_NAME:-$(basename "$ROOT_DIR")}"
    fi
    echo "1) 在项目根 .gitignore 中添加 '${FRAMEWORK_DIR_NAME}/'"
    if $APPLY; then
      GITIGNORE="$ROOT_DIR/.gitignore"
      if [[ -f "$GITIGNORE" ]] && grep -q "^${FRAMEWORK_DIR_NAME}/$" "$GITIGNORE"; then
        echo "[已存在] .gitignore 中已包含 '${FRAMEWORK_DIR_NAME}/'"
      else
        echo "${FRAMEWORK_DIR_NAME}/" >> "$GITIGNORE"
        echo "[应用] 已写入 .gitignore: ${FRAMEWORK_DIR_NAME}/"
      fi
    fi
    ;;
  *)
    echo "[ERROR] 不支持的模式: $MODE" >&2
    exit 3
    ;;
esac

# 将模式持久化到 config/rules.env（相对目录）
mkdir -p "$ROOT_DIR/config"
if [[ -f "$RULES_ENV" ]] && grep -q "^FRAMEWORK_DISTRIBUTION_MODE=" "$RULES_ENV"; then
  sed -i.bak -E "s/^FRAMEWORK_DISTRIBUTION_MODE=.*/FRAMEWORK_DISTRIBUTION_MODE=$MODE/" "$RULES_ENV"
else
  echo "FRAMEWORK_DISTRIBUTION_MODE=$MODE" >> "$RULES_ENV"
fi

echo "[已记录] FRAMEWORK_DISTRIBUTION_MODE=$MODE → $RULES_ENV"
if ! grep -q "^FRAMEWORK_DIR_NAME=" "$RULES_ENV" 2>/dev/null; then
  echo "FRAMEWORK_DIR_NAME=$(basename "$ROOT_DIR")" >> "$RULES_ENV"
  echo "[已记录] FRAMEWORK_DIR_NAME=$(basename "$ROOT_DIR") → $RULES_ENV"
fi
exit 0
